from PyQt5.QtCore import QDateTime
from PyQt5.QtWidgets import QDialog, QFormLayout, QDateTimeEdit, QSpinBox, QHBoxLayout, QLabel, QDialogButtonBox


class TimerDialog(QDialog):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setWindowTitle("设置定时任务")

        # 创建布局
        layout = QFormLayout()

        # 创建日期时间选择控件
        self.start_time_edit = QDateTimeEdit(QDateTime.currentDateTime(), self)
        self.start_time_edit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
        layout.addRow("定时任务启动时间", self.start_time_edit)

        # 创建运行间隔选择控件
        self.interval_spinbox = QSpinBox(self)
        self.interval_spinbox.setRange(1, 1440)  # 1分钟到1440分钟（即24小时）
        self.interval_spinbox.setValue(120)  # 默认30分钟
        layout.addRow("定时任务运行间隔(分钟)", self.interval_spinbox)

        # 创建随机等待时间控件
        random_wait_layout = QHBoxLayout()

        self.min_wait_label = QLabel("最小随机等待时间(秒):", self)
        self.min_wait_spinbox = QSpinBox(self)
        self.min_wait_spinbox.setRange(1, 3600)  # 最小等待时间范围为1秒到3600秒
        self.min_wait_spinbox.setValue(1)

        self.max_wait_label = QLabel("最大随机等待时间(秒):", self)
        self.max_wait_spinbox = QSpinBox(self)
        self.max_wait_spinbox.setRange(2, 3600)  # 最大等待时间范围为1秒到3600秒
        self.max_wait_spinbox.setValue(3)

        # 将最小和最大等待时间控件添加到同一行
        random_wait_layout.addWidget(self.min_wait_label)
        random_wait_layout.addWidget(self.min_wait_spinbox)
        random_wait_layout.addWidget(self.max_wait_label)
        random_wait_layout.addWidget(self.max_wait_spinbox)

        layout.addRow(random_wait_layout)

        # 创建按钮框
        button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel, self)
        button_box.button(QDialogButtonBox.Ok).setText("确定")
        button_box.button(QDialogButtonBox.Cancel).setText("取消")
        button_box.accepted.connect(self.accept)
        button_box.rejected.connect(self.reject)
        layout.addWidget(button_box)

        # 设置弹窗的布局
        self.setLayout(layout)

    def get_start_time(self):
        return self.start_time_edit.dateTime()

    def get_interval(self):
        return self.interval_spinbox.value()

    def get_wait_time(self):
        return self.min_wait_spinbox.value(),self.max_wait_spinbox.value()